/*
 * 爱组搭，低代码组件化开发平台
 * ------------------------------------------
 * 受知识产权保护，请勿删除版权申明，开发平台不允许做非法网站，后果自负
 */
package com.aizuda.boot.modules.system.mapper;

import com.aizuda.boot.modules.auth.domain.vo.ThirdSysUserVo;
import com.aizuda.boot.modules.business.employee.domain.response.EmployeeQueryShowVO;
import com.aizuda.boot.modules.system.entity.SysUser;
import com.aizuda.boot.modules.system.entity.vo.SysUserVO;
import com.aizuda.boot.modules.system.entity.vo.UserAvatarVO;
import com.aizuda.boot.modules.business.feishu.domain.UserVo;
import com.aizuda.service.mapper.CrudMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 系统用户 Mapper 接口
 * </p>
 *
 * @author 青苗
 * @since 2021-11-03
 */
public interface SysUserMapper extends CrudMapper<SysUser> {

    Page<SysUser> selectPageByVO(Page page, @Param("vo") SysUserVO vo, @Param("sysTenantKeys") List<String> sysTenantKeys);

    /**
     * 根据关键词搜索员工
     *
     * @param msg
     * @return
     */
    List<EmployeeQueryShowVO> queryEmployee( @Param("msg") String msg);

    /**
     * 根据员工ID查询员工信息
     * @param employeeIds
     * @return
     */
    List<EmployeeQueryShowVO> queryEmployeeShow(List<Long> employeeIds);

    /**
     * 根据部门ID查询员工ID
     * @param departmentId
     * @return
     */
    List<Long> getEmployeeIdsByMainDepartment(Long departmentId);

    /**
     * 根据第三方系统的唯一ID查询用户信息
     *
     * @param thirdUuids 第三方系统的唯一ID集合
     * @param name       用户名
     * @return 用户信息列表
     */
    List<ThirdSysUserVo> selectListByThirdUuids(@Param("thirdUuids") List<String> thirdUuids, @Param("name") String name);

    /**
     * 获取@用户列表
     * @param sysTenantKey
     * @param keyword
     * @return
     */
    List<UserVo> getAtUsers(@Param("tenantKey") String sysTenantKey, @Param("keyword") String keyword);

    /**
     * 根据用户ID列表获取用户头像信息
     * @param userIds 用户ID列表
     * @return 用户头像信息列表
     */
    List<UserAvatarVO> getUserAvatarsByIds(@Param("userIds") List<Long> userIds);

    /**
     * 根据租户和关键词查询员工
     * @param tenantKey 租户键
     * @param keyword 关键词（姓名、工号等）
     * @return 员工列表
     */
    List<EmployeeQueryShowVO> selectEmployeeByTenantAndKeyword(@Param("tenantKey") String tenantKey, @Param("keyword") String keyword);

}
